#pragma once

#include <util_usb_desc_cdc_acm.h>
#include <util_usb_desc_cdc_call_mgt.h>
#include <util_usb_desc_cdc_header.h>
#include <util_usb_desc_cdc_union.h>

typedef struct {
	usb_desc_cfg_t cfg_desc; // 配置描述符（但长度为描述符集合总长度）
	usb_desc_iad_t iad_desc; // 接口关联描述符

	// 控制接口
	comm_intf comm_intf;		       // 通信接口描述符
	usb_desc_cdc_header_t header_desc;     // CDC描述符头
	usb_desc_cdc_call_mgt_t call_mgt_desc; // 呼叫管理功能描述符
	usb_desc_cdc_acm_t acm_desc;	       // ACM功能描述符
	usb_desc_cdc_union_v union_desc;       // 接口联合功能描述符
	u8_s intf_no_a[2];		       // 接口联合功能描述符的接口号
	usb_desc_ep_t comm_ep;		       // 中断端点描述符

	// 数据接口
	comm_intf data_intf;	   // 数据接口描述符
	usb_desc_ep_t bulk_in_ep;  // 批量输入端点
	usb_desc_ep_t bulk_out_ep; // 批量输出端点
} __attribute__((packed)) usb_desc_set_cdc_t;

_Static_assert(sizeof(usb_desc_set_cdc_t) == 75,
	       "Struct usb_desc_set_cdc_t defined error!");
